/**
 * 轮播图服务
 *
 * 处理轮播图的CRUD操作
 */
import { api } from './api';
import { Banner, BannerCreate, BannerUpdate, PaginatedResponse, PaginationParams } from '../types';

export interface BannerListParams extends PaginationParams {
  active_only?: boolean;
}

export const bannerService = {
  /**
   * 获取轮播图列表
   * @param params 查询参数
   * @returns 分页的轮播图列表
   */
  getBanners: async (params: BannerListParams = {}): Promise<PaginatedResponse<Banner>> => {
    const queryParams = new URLSearchParams();

    if (params.page) queryParams.append('page', String(params.page));
    if (params.size) queryParams.append('size', String(params.size));
    if (params.active_only !== undefined) queryParams.append('active_only', String(params.active_only));

    const url = `/api/banners?${queryParams.toString()}`;
    return api.get<PaginatedResponse<Banner>>(url);
  },

  /**
   * 获取轮播图详情
   * @param id 轮播图ID
   * @returns 轮播图详情
   */
  getBanner: async (id: number): Promise<Banner> => {
    return api.get<Banner>(`/api/banners/${id}`);
  },

  /**
   * 创建轮播图
   * @param data 轮播图数据
   * @returns 创建的轮播图
   */
  createBanner: async (data: BannerCreate): Promise<Banner> => {
    return api.post<Banner>('/api/banners', data);
  },

  /**
   * 更新轮播图
   * @param id 轮播图ID
   * @param data 更新数据
   * @returns 更新后的轮播图
   */
  updateBanner: async (id: number, data: BannerUpdate): Promise<Banner> => {
    return api.put<Banner>(`/api/banners/${id}`, data);
  },

  /**
   * 删除轮播图
   * @param id 轮播图ID
   * @returns 删除结果
   */
  deleteBanner: async (id: number): Promise<{ message: string }> => {
    return api.delete<{ message: string }>(`/api/banners/${id}`);
  },

  /**
   * 获取激活的轮播图（用于前台显示）
   * @returns 激活的轮播图列表
   */
  getActiveBanners: async (): Promise<Banner[]> => {
    const queryParams = new URLSearchParams();
    queryParams.append('active_only', 'true');
    queryParams.append('size', '10');

    const url = `/api/banners?${queryParams.toString()}`;
    const response = await api.get<PaginatedResponse<Banner>>(url);
    return response.items;
  },
};